package com.zeng.ssm.dal.mapper;

import com.zeng.ssm.dal.model.AsyncTaskRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 描述信息
 *
 * @author zengwanlin
 * @date 2023-08-29T10:39
 */
@Mapper
public interface AsyncTaskRecordDao {

    /**
     * 查询可抢占的任务
     *
     * @return
     */
    List<AsyncTaskRecord> selectGrabableRecordList();

    /**
     * 根据ID查询记录
     *
     * @return
     */
    AsyncTaskRecord selectByPrimaryKey(Integer id);

    /**
     * 根据Example查询记录
     *
     * @return
     */
    List<AsyncTaskRecord> selectByExample(AsyncTaskRecord example);

    /**
     * 查询已被锁定的任务
     *
     * @return
     */
    List<AsyncTaskRecord> selectLockedRecord();

    /**
     * 根据Example更新记录
     *
     * @return
     */
    int updateByExample(@Param("record") AsyncTaskRecord record, @Param("example") AsyncTaskRecord example);

    /**
     * 插入记录
     *
     * @param record
     * @return
     */
    int insertSelective(AsyncTaskRecord record);

    /**
     * 根据ID更新记录
     *
     * @return
     */
    int updateByPrimaryKeySelective(AsyncTaskRecord record);

    /**
     * 释放锁，使可被抢占
     *
     * @param id
     * @param lockOwner
     * @return
     */
    int unlock(@Param("id") Integer id, @Param("lockOwner") String lockOwner);

}
